package com.netease.streamlearningbyjava;

import com.netease.streamlearningbyjava.bean.Employee2;

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

/**
 * 创建日期：2021/11/3 10:12
 *
 * @author tony.sun
 * 类说明：
 */

public class Stream11Find {
    List<Employee2> employee2s = Arrays.asList(
            new Employee2("张三", 18, 9999.99, Employee2.Status.FREE),
            new Employee2("李四", 58, 5555.55, Employee2.Status.BUSY),
            new Employee2("王五", 26, 3333.33, Employee2.Status.VOCATION),
            new Employee2("赵六", 36, 6666.66, Employee2.Status.FREE),
            new Employee2("田七", 12, 8888.88, Employee2.Status.BUSY)
    );

    /**这些属于终止操作
     * 查找与匹配
     * allMatch--检查是否匹配所有元素
     * anyMatch--检查是否至少匹配一个元素
     * noneMatch--检查是否没有匹配所有元素
     * findFirst--返回第一个元素
     * findAny--返回第一个元素
     * findAny--返回流中任意元素
     * count--返回流中元素的总个数
     * max--返回流中的最大值
     * min--返回流中的最小值
     */
    @Test
    public void test1(){
        //allMatch表示是否都匹配,这里是list里所有对象的Status都匹配BUSY
        boolean allMatch = employee2s.stream()
                .allMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//固定格式：(e) ->,还有条件，这里是等于BUSY,
        System.out.println("allMatch:"+allMatch);
        //是否任意一个是匹配的BUSY
        boolean anyMatch = employee2s.stream()
                .anyMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
        System.out.println("anyMatch："+anyMatch);
        //是否不存在一个匹配BUSY的
        boolean noneMatch = employee2s.stream()
                .noneMatch((e) -> e.getStatus().equals(Employee2.Status.BUSY));//条件
        System.out.println("noneMatch:"+noneMatch);
        //findFirst表示查找第一个，这里是获取最低工资的人，
        Optional<Employee2> findFirst = employee2s.stream()
                .sorted((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序
                .findFirst();
        System.out.println("findFirst:"+findFirst.get());//获取这个bean
        //获取最高工资，多了个-号
        Optional<Employee2> findFirst2 = employee2s.stream()
                .sorted((e1, e2) -> -Double.compare(e1.getSalary(), e2.getSalary()))//根据工资来从小到大排序，这里多了个“-”
                .findFirst();
        System.out.println("findFirst2:"+findFirst2.get());//获取这个bean
        //findAny任意找一个，这里是在闲着的员工中任意找一个
        Optional<Employee2> findAny = employee2s.stream()
                .filter((e) -> e.getStatus().equals(Employee2.Status.FREE))//这里是过滤，满足条件FREE的保留
                .findAny();//任意找一个
        System.out.println("findAny:"+findAny.get());
    }
    @Test
    public void test2(){
        //总个数
        long count = employee2s.stream()
                .count();
        System.out.println("count:"+count);
        //最大值
        Optional<Employee2> max = employee2s.stream()
                .max((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));//工资最高
        System.out.println("max:"+max.get());
        //最小值
        Optional<Employee2> min = employee2s.stream()
                .min((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));//工资最低
        System.out.println("min:"+min.get());


    }

}
